package towers;

import java.awt.Dimension;
import java.awt.geom.Point2D;

import javax.swing.ImageIcon;

import projectiles.Plasmaball;
import projectiles.Projectile;

/**
 * @author onbekend
 * @version 1.1
 * @since 2011-04-11
 */
public class Plasmagun extends Tower {

	// Het lijstje gegevens
	private static final int maxHealth = 400;
	private static int health = maxHealth;
	private static final int range = 300;
	private static final int firerate = 400;
	public static final int cost = 250;
	private static final ImageIcon image = new ImageIcon("images/plasmagun.gif");

	// Image2 is de onderkant van de toren, deze hoeft niet te draaien
	private static final ImageIcon image2 = new ImageIcon("images/plasmagunbase.gif");
	private static final Dimension size = new Dimension(Plasmagun.image.getIconWidth(), Plasmagun.image.getIconHeight());

	/**
	 * Constructor
	 * 
	 * @param position
	 *            De positie van de cannon meegeven
	 */
	/* /// Constructor //////////////////////////////////////// */
	public Plasmagun(Point2D.Double position) {
		super(position, health, Plasmagun.image, size, 0, range, firerate, cost);
	}

	/**
	 * Zorgt er vooral voor dat een toren op een enemy richt, en zijn viewangle update
	 * zodat de toren naar de enemy gaat kijken
	 * @see Tower#update()
	 */
	/* /// update //////////////////////////////////////// */
	public boolean update() {
		super.update();

		return this.aimAtEnemy();
	}

	/* /// getPlatformImage //////////////////////////////////////// */
	public ImageIcon getPlatformImage() {
		return image2;
	}

	/**
	 * Zorgt ervoor dat een projectiel afgeschoten word op de vijand waar op het
	 * moment op gericht word
	 */
	/* /// shoot //////////////////////////////////////// */
	public Projectile shoot() {
		updateFirerate();

		Point2D.Double middle = this.getMiddle();

		// Pas positie aan waar de Cannonball moet verschijnen aan de hand van
		// de viewangle
		double xAdd;
		double yAdd;

		double distanceToBottom = getSize().getHeight() / 2;

		// we kijken naar linksonder
		if (viewAngle >= 0 && viewAngle < 90) {
			xAdd = -1 * (Math.sin(Math.toRadians(viewAngle))) * distanceToBottom;
			yAdd = (Math.cos(Math.toRadians(viewAngle))) * distanceToBottom;
		} // we kijken naar linksboven
		else if (viewAngle >= 90 && viewAngle < 180) {
			xAdd = -1 * Math.sin(Math.toRadians(viewAngle)) * distanceToBottom;
			yAdd = Math.cos(Math.toRadians(viewAngle)) * distanceToBottom;
		} // we kijken naar rechtsboven
		else if (viewAngle >= 180 && viewAngle < 270) {
			xAdd = -1 * Math.sin(Math.toRadians(viewAngle)) * distanceToBottom;
			yAdd = Math.cos(Math.toRadians(viewAngle)) * distanceToBottom;
		} // we kijken naar rechtsonder
		else {
			xAdd = -1 * Math.sin(Math.toRadians(viewAngle)) * distanceToBottom;
			yAdd = Math.cos(Math.toRadians(viewAngle)) * distanceToBottom;
		}

		middle.x += xAdd;
		middle.y += yAdd;

		Plasmaball x = new Plasmaball(this, middle, viewAngle, this.getForesideEnemy());

		// Positie van plasmaball is linksboven van plaatje
		// Echter positie van middle moet het midden zijn van plasmaball, dus
		// positie aanpassen
		x.setPosition(new Point2D.Double(x.getPosition().x - (x.getSize().getWidth() / 2), x.getPosition().y
				- (x.getSize().getHeight() / 2)));
		return x;
	}

}